﻿#pragma once
#include<stdio.h>
#include<locale.h>
#include<Windows.h>
#include<stdbool.h>
#include<stdlib.h>
#include<time.h>

#define pos_x 24
#define pos_y 5

#define wall L'□'
#define body L'●'
#define food L'●'

//类型的声明

//蛇的方向
enum direction
{
	up = 1,
	down,
	left,
	right
};

//蛇的状态◈◊
//正常、撞墙、撞到自己、正常退出
enum game_status
{
	ok,
	kill_by_wall,
	kill_by_self,
	end_normal

 };

//蛇身的节点类型
typedef struct snakenode
{
	int x;
	int y;
	struct snakenode* next;
}skn, * pskn;

//贪吃蛇
typedef struct snake
{
	pskn pskhead;//指向蛇头的指针
	pskn pfood;//指向食物的指针
	enum direction dir;//蛇的方向
	enum game_status status;//游戏状态
	int food_weight;//一个食物的分数
	int score;//总分数
	int sleep_time;//休息时间，时间越短，速度越快，反之
}sk, *psk;



//函数的声明

//游戏的初始化
void game_init(psk ps);

//定位光标位置
void set_pos(short x, short y);

//欢迎界面的打印
void welcometogame();

//创建地图
void creatmap();

//初始化蛇身
void initsnake(psk ps);

//创建食物
void creatfood(psk ps);

//游戏运行的逻辑
void game_run(psk ps);

//蛇走一步
void snakemove(psk ps);

//检测下一格是否有食物
int nextisfood(pskn pnextnode, psk ps);

//吃掉食物
void eatfood(pskn pnextnode, psk ps);

//下一格位置不是食物
void nofood(pskn pnextnode, psk ps);

//检测蛇是否撞墙
void killbywall(psk ps);

//检测蛇是否撞到自己
void killbyself(psk ps);

//结束游戏
void game_end(psk ps);






